JDBC je nieco ako ODBC teda je to programova vrstva ktora vyrovnava rozdiely pri komunikacii s rôznymi typmi databáz. Jej rozdiel je, že JDBC je spustiteľné na akomkoľvek operačnom systéme, kdežto ODBC poznáme len z Windows-ov.

Základné veci o JDBC:

JDBC  to je Java DataBase Connectivity.

Čo môžme pomocou JDBC robiť:

    * Posielanie SQL dotazov a príkazov na SQL server;
    * Zobrazovanie výsledkov dotazov;
    * Modifikovanie alebo mazanie priamo obsahu tabuliek;

Popisany priklad konektovania sa na databazu Mysql a pracu s SQL prikazmy:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCTester {
    public static void main(String[] args) throws Exception {

        Connection con = null;   //nastavenie spojenia na prazdnu hodnotu
        Statement  a= null;        //nastavenie statementu na prazdnu hodnotu
        ResultSet rs= null;        //nastavenie resultu na prazdnu hodnotu, sluzi na vykonanie prikazov
        
        try {
            Class.forName("com.mysql.jdbc.Driver");  // takto nastavime driver s ktorim budeme pracovat
          
// takto sa spojime s databazou, kde jdbc:mysql://localhost/testjdbc je jej specifikacia, potom nasleduje meno a heslo uzivatela
// v pripade ze sa pripajame na vlastnom pocitaci mozme pouzit tento prikaz:

            con = DriverManager.getConnection("jdbc:mysql://localhost/testjdbc", "root", ""); 

//Ak sa chceme pripojit na skolsku databazu mozme posuzit prikaz
//  con = DriverManager.getConnection("jdbc:mysql://s.ics.upjs.sk/","skola", "skola");    
 
            a= con.createStatement(); // vytvorenie statementu
      
// v pripad, ze chceme vykonavat ine prikazy ako select, napr. (insert, delete, update) pouzejeme :    
       //     int recordsUpdated;
       //    recordsUpdated = a.executeUpdate("DELETE * FROM didi WHERE id = 4");
       //    recordsUpdated = a.executeUpdate("UPDATE didi SET meno='Fero' WHERE id = 6");

// na klasicke selecty použivame re (ResultSet)     
           rs = a.executeQuery("SELECT * FROM didi order by meno");       // vykonanie prikazu (spustenie statementu)

ResultSet poskytuje akési programové browsovanie po relácii, ktorú nám vrátil príkaz executeQuery. Na začiatku je kurzor na prvom riadku relácie.
Prikazy
first - choď s kurzorom na prvý riadok relácie.
next - choď s kurzorom na ďalší riadok relácie.
last - choď s kurzorom na posledný riadok relácie.
get funkcie: je to sada funkcií tvaru getType (napr. getInt, getChar apod.). Každá vracia príslušný dátový typ podľa svojho názvu. Parametrom týchto  funkcií je column index resp. column name príslušnej relácie. Tieto funkcie slúžia na vytiahnutie údaju z konkrétneho stĺpca relácie z riadku kde sa nachádza kurzor.
update funkcie: podobne ako get funkcie ale slúžia na zápis údajov. Tieto príkazy je možné ale spúšťať len ak DB podporuje update databázy priamo zo SELECTU.
funkcia getMetaData - vracia objekt typu ResultSetMetaData, v ktorom je možné zistiť rôzne dôležité informácie o našej relácii, ako napr. počet riadkov, či stĺpcov, dátové typy jednotlivých stĺpcov a pod.
               
            while(rs.next()) {                                                           // tento cyklus sluzi na zobrazenie obsahu tabulky, ak rs -
                 System.out.print(rs.getString("id"));                           //- (ResultSet) najde (obsahuje) dalsi zaznam tak sa tento -
                 System.out.print(' '+ rs.getString("meno"));                //- zaznam zobrazy...
                 System.out.print(' '+ rs.getString("priezvisko"));
                 System.out.println();
              }

        rs.close();
        a.close();
        con.close();

        } catch (Exception e) {
          System.out.println("Nastala chyba." + e.getMessage());  //osetrenie chyb
         }

Prostriedky v databáze sú obmedzené - napr. každá databáza umožňuje obslužiť istý maximálny počet pripojených klientov (prípadne je tento počet obmedzený licenciou). Každé získanie objektu typu Connection predstavuje v podstate pripojenie jedného klienta. Ak sa klient neodpojí manuálne (teda ak nezatvorí pripojenie pomocou close()), pripojenie čaká, a čaká a čaká. A ak sa takto zachovajú všetci klienti, čoskoro sa k databáze nebude môcť pripojiť nikto. Nehovoriac o tom, že aj ResultSet-y, či Statement-y spotrebúvajú pamäť.

         finally {         //upratanie a uvoľnenie databázových prostriedkov
            if(resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException ee) {}
            }
            if(statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {}
            }
            if(con != null) {
                try {
                    con.close();
                } catch (SQLException e) {}
            }
        }
}}

Vzorovy priklad uz bez okomentovania tu + ďalšie príklady.
Nahor!